<?php
/*
 * Created on Jan 27, 2008
 *
 * This is an open source software, please obey the GPL
 * The Referee Service is offered by Cacomand Inc. 
 * View Http://www.cacomand.com for support or more information
 * You can also view distrema.googlecode.com to join the community.
 */
//--------------------配置仲裁服务器
//设置仲裁服务器的地址,如果不知道,您可以到www.cacomand.com上去查询.
//$ref_host="127.0.0.1";
$ref_host="118.126.1.5";
$ref_basename="referee";
//输入仲裁服务器低级的用户名和密码,如果不知道,您可以到www.cacomand.com上去查询.
$ref_username="referee_f";
$ref_password="88081911";

//您想要运行时报告吗?
$developer=false;

//--------------------配置兼容的CCR
//设置CCR低级权限的用户名和密码,对于这个权限,每个cacomand公司授权的CCR都应该拥有相同的设置.如果不知道,您可以到www.cacomand.com上去查询.
$ccr_basename="sq_userbase";
$ccr_public_username="sq_userbase";
$ccr_public_key="88081911";
//CCR还有一个中级权限和高级权限,详情请参阅开发手册

$ref_link=mysql_connect($ref_host,$ref_username,$ref_password);
mysql_select_db($ref_basename,$ref_link);

 		function get_username($epsn,$user_ID)
		/*功能描述:通过epsn和user_ID获得用户名
		 *调用方法:get_username(用户的epsn,用户的user_ID)
		 *返回值:<成功>用户的用户名,<失败>false
		 *实现过程描述:访问epsn对应的CCR,再找到user_ID对应的username
		 *TC:2
		 */
		{
			global $ccr_public_username,$ccr_public_key,$ccr_basename;
			global $developer;
			$ccr_link=mysql_connect(get_ccr_host($epsn),$ccr_public_username,$ccr_public_key);
			mysql_select_db($ccr_basename,$ccr_link);//this link must be self
			if($ccr_link!=FALSE)
			{
				$select_format='SELECT username FROM user_list WHERE user_ID=%d';
				$query=sprintf($select_format,$user_ID);
				if($developer)
					echo("获取用户名:".$query."<br />");
				$res_username=mysql_query($query,$ccr_link);
				//mysql_close($ccr_link); in order not to confuse its environment
				if($obj_username=mysql_fetch_object($res_username))
				{
					return $obj_username->username;
				}
				else
				{
					return FALSE;
				}
			}
		}
		
		function get_ccr_host($epsn)
		/*功能描述:通过epsn获得CCR的IP地址,link to referee base to thanslate epsn to IP address
		 *返回值:<成功>这个epsn对应的ip地址,<失败>false;
		 *调用方法:get_ccr_host(用户的epsn)
		 *实现过程描述:连接到REF(referee server)获得对应的IP地址,如果连接不上则返回错误代码,如果找不到这条记录则返回错误代码,如果这条记录已经过时则返回错误代码
		 *TC:1
		 */
		{
			//global $ref_host,m$ref_basename,$ref_username,$ref_password;
			global $ref_link;
			global $developer;
			global $ccr_hosts;
			if(isset($ccr_hosts[$epsn]))
			{
				if($developer)
					echo("重复CCR地址：".$ccr_hosts[$epsn]."<br />");
				return $ccr_hosts[$epsn];
			}
			else
			{
				/**$ref_link=mysql_connect($ref_host,$ref_username,$ref_password);
			mysql_select_db($ref_basename,$ref_link);*/	
				if ($ref_link!=FALSE)
				{
					$select_format='SELECT IP_address FROM epsn_pool WHERE epsn="%s"';
					$query=sprintf($select_format,$epsn);
					if($developer)
						echo("获得CCR地址:".$query."<br />");//to find out the IP address for this epsn
					$res_ccr_host=mysql_query($query,$ref_link);
					if ($obj_ccr_host=mysql_fetch_object($res_ccr_host));
					{
						$got_host=$obj_ccr_host->IP_address;
						$isset_ccr_host=TRUE;
						if($developer)
							echo("获得CCR地址:CCR地址已找到，地址为：".$got_host."<br />");
					}
					//mysql_close($ref_link);//close the link to the Referee Server
					$ccr_hosts[$epsn]=$got_host;
					return $got_host;
				}
				else
					return false;
			}
		}
		
		function get_user_level($epsn,$user_ID)
		/* 功能描述:获得用户的权限级别
		 * 返回值:<存在记录>用户的权限级别;<失败>false;
		 * 调用方法(用户的epsn,用户序号)
		 * 实现过程描述:访问REF获得所查询
		 * TC:
		 */
		{
			//global $ref_host,$ref_username,$ref_password,$ref_basename;
			global $ref_link;
			global $developer;
			/**$ref_link=mysql_connect($ref_host,$ref_username,$ref_password);
			mysql_select_db($ref_basename,$ref_link);*/	
			if ($ref_link!=FALSE)
			{
				$select_format='SELECT level FROM certification WHERE epsn="%s" AND user_ID=%d';
				$query=sprintf($select_format,$epsn,$user_ID);
				if($developer)
					echo("获取用户认证度:".$query."<br />");//to find out the IP address for this epsn
				$res_level=mysql_query($query,$ref_link);
				if ($res_level!=false)
				{
					$obj_level=mysql_fetch_object($res_level);
					$got_level=$obj_level->level;
					$isset_ccr_host=TRUE;
					if($developer)
						echo("用户级别已找到，为：".$got_level."<br />");
				}
				else
				{
					$got_level=0;
				}
				//mysql_close($ref_link);//close the link to the Referee Server
				return $got_level;
			}
			else
				return false;
		}
		
 		class user
		/* 类的功能:所有服务的用户类的基类,用来表示服务中的一个用户
		 * 类的公用数据成员:
		 * |<epsn>:就是epsn
		 * |<user_ID>用户序号
		 * |<username>用户名称
		 * |<crr_host>用户所在的数据服务器的IP地址
		 * |<user_level>用户的权限级别
		 * 类的函数成员
		 * |user()
		 * |get_var_from_ccr()
		 * |add_record()
		 * |reset_record()
		 * |del_record()		 * |confirm_upload()//应该在子类dps_user中
		*建构方法 user(用户的epsn,用户序号)
		*
		*/
		{
			public $epsn,$user_ID,$username,$realname,$ccr_host,$user_level;
			function user($epsn,$user_ID)
			/* 功能描述:user类的建构函数,给这个类的"ccr_host","epsn","username","user_ID"四个成员变量赋值
			 * 调用方法:user(用户epsn,用户CCR序列号)
			 * 返回值:<成功>一个user对象,<失败>false
			 * 实现过程描述:建类的时候已经有了epsn和user_ID两个变量,通过访问REF和CCR获取ccr_host和username.如果获取CCR的IP地址失败,则返回错误代码,如果获取username失败,则返回错误代码
			 * TC:3
			 */
			{
				global $ccr_public_username,$ccr_public_key,$ccr_basename;
				global $developer;
				$this->epsn=$epsn;
				$this->user_ID=$user_ID;
				$this->ccr_host=get_ccr_host($epsn);//TC+1
				
				if(!empty($this->ccr_host))
				$isset_ccr_host=TRUE;
				else
				$isset_ccr_host=FALSE;//to record if the ip address of the CCR is found
				$isset_userinfo=FALSE;//to record if the userinfo is got successfully
				//if got the ccr_host successfully, link to the user's CCR, to thanslate his user name into userID, and get his personal infomation
				if ($isset_ccr_host)
				{
					$this->ccr_link=mysql_connect($this->ccr_host,$ccr_public_username,$ccr_public_key);
					mysql_select_db($ccr_basename,$this->ccr_link);
					if($this->ccr_link!=FALSE)
						$isset_userinfo=TRUE;
					else
						return false;
					//check if the generation is succeeful.
					if ($isset_userinfo and $isset_ccr_host)
						return true;
					else
						return false;
				}
			}
						
			function gain_user_level()
			{
				$this->user_level=get_user_level($epsn,$user_ID);
			}
			
			function get_var_from_ccr($var_ID)
			/* 功能描述:从远程CCR处调用这个用户的这个类型的变量
			 * 调用方法:get_var_from_ccr(用户的变量类型代码[,作为搜索条件的caption])
			 * 返回值:<成功>一个含有获得的数据的数组,<失败>false;
			 * 实现过程描述:因为一个用户的一个变量类型可能对应多条纪录,所以返回的是一个数组.如果搜索不到,则返回错误代码false(0),如果连接不到CCR服务器,则返回错误代码
			 * TC:2
			 */
			{
				//global $ccr_public_username,$ccr_public_key,$ccr_basename;
				global $developer;
				if(func_num_args()==3)
				{
				$caption=func_get_arg(1);
				$memo=func_get_arg(2);
				}
				elseif(func_num_args()==2)
				{
				$caption=func_get_arg(1);
				$memo="";
				}
				else
				{
					$caption="";
					$memo="";
				}
				/**$ccr_link=mysql_connect($this->ccr_host,$ccr_public_username,$ccr_public_key);
				mysql_select_db($ccr_basename,$ccr_link);*/
				if($this->ccr_link!=FALSE)
				{
					if(empty($caption) AND empty($memo))//两个都空
					{
						$select_format='SELECT caption,memo FROM variables_%d WHERE var_ID=%d';
						$query=sprintf($select_format,$this->user_ID,$var_ID);
					}
					elseif(empty($memo))//caption不空,memo空
					{
						$select_format='SELECT caption,memo FROM variables_%d WHERE var_ID=%d AND caption LIKE "%s"';
						$query=sprintf($select_format,$this->user_ID,$var_ID,$caption."%");
					}
					elseif(empty($caption))//caption空memo不空
					{
						$select_format='SELECT caption,memo FROM variables_%d WHERE var_ID=%d AND memo LIKE "%s"';
						$query=sprintf($select_format,$this->user_ID,$var_ID,$memo."%");
					}
					else//两个都不空或caption空memo不空
					{
						$select_format='SELECT caption,memo FROM variables_%d WHERE var_ID=%d AND caption LIKE "%s" AND memo LIKE "%s"';
						$query=sprintf($select_format,$this->user_ID,$var_ID,$caption."%",$memo."%");
					}
					if($developer)
						echo("从CCR上获取信息:".$query."<br />");
					$res_var=mysql_query($query,$this->ccr_link);
					$m=0;
					while($obj_var=mysql_fetch_object($res_var))
					{
						$return_array[$m]["caption"]=$obj_var->caption;
						$return_array[$m]["memo"]=$obj_var->memo;
						$m++;
					}
					if($m!=0)
					{
						if($developer)
							echo("从CCR上获取信息:user: ".$this->username."的数据 (类型代号为=".$var_ID.", 索引为=".$caption.") 已获得,共有 ".$m."条记录<br />");
						return $return_array;
					}
					else
					{
						if($developer)
							echo("从CCR上获取信息:user: ".$this->username."的计算机上不存在这条记录,您可以尝试注册之<br />");
						return false;
					}
				}
			}	
			
			function get_var_from_sent_data($var_ID)
			/* 功能描述:从远程CCR处的接收池调用这个用户的这个类型的变量
			 * 调用方法:get_var_from_ccr(用户的变量类型代码[,作为搜索条件的caption])
			 * 返回值:<成功>一个含有获得的数据的数组,<失败>false;
			 * 实现过程描述:因为一个用户的一个变量类型可能对应多条纪录,所以返回的是一个数组.如果搜索不到,则返回错误代码false(0),如果连接不到CCR服务器,则返回错误代码
			 * TC:2
			 */
			{
				//global $ccr_public_username,$ccr_public_key,$ccr_basename;
				global $developer;
				if(func_num_args()==3)
				{
				$caption=func_get_arg(1);
				$memo=func_get_arg(2);
				}
				elseif(func_num_args()==2)
				{
				$caption=func_get_arg(1);
				$memo="";
				}
				else
				{
					$caption="";
					$memo="";
				}
				/**$ccr_link=mysql_connect($this->ccr_host,$ccr_public_username,$ccr_public_key);
				mysql_select_db($ccr_basename,$ccr_link);*/
				if($this->ccr_link!=FALSE)
				{
					if(empty($caption) AND empty($memo))//两个都空
					{
						$select_format='SELECT caption,memo FROM sent_data_pool WHERE user_ID=%d AND var_ID=%d';
						$query=sprintf($select_format,$this->user_ID,$var_ID);
					}
					elseif(empty($memo))//caption不空,memo空
					{
						$select_format='SELECT caption,memo FROM sent_data_pool WHERE user_ID=%d AND var_ID=%d AND caption LIKE "%s"';
						$query=sprintf($select_format,$this->user_ID,$var_ID,$caption."%");
					}
					elseif(empty($caption))//caption空memo不空
					{
						$select_format='SELECT caption,memo FROM sent_data_pool WHERE user_ID=%d AND var_ID=%d AND memo LIKE "%s"';
						$query=sprintf($select_format,$this->user_ID,$var_ID,$memo."%");
					}
					else//两个都不空或caption空memo不空
					{
						$select_format='SELECT caption,memo FROM sent_data_pool WHERE user_ID=%d AND var_ID=%d AND caption LIKE "%s" AND memo LIKE "%s"';
						$query=sprintf($select_format,$this->user_ID,$var_ID,$caption."%",$memo."%");
					}
					if($developer)
						echo("从CCR的接收池上获取信息:".$query."<br />");
					$res_var=mysql_query($query,$this->ccr_link);
					//mysql_close($ccr_link);//close the link here,for the function may escape during the return
					$m=0;
					while($obj_var=mysql_fetch_object($res_var))
					{
						$return_array[$m]["caption"]=$obj_var->caption;
						$return_array[$m]["memo"]=$obj_var->memo;
						$m++;
					}
					if($m!=0)
					{
						if($developer)
							echo("从CCR的接收池上获取信息:user: ".$this->username."的数据 (类型代号为=".$var_ID.", 索引为=".$caption.") 已获得,共有 ".$m."条记录<br />");
						return $return_array;
					}
					else
					{
						if($developer)
							echo("从CCR的接收池上获取信息:user: ".$this->username."的计算机上不存在这条记录,您可以尝试注册之<br />");
						return false;
					}
				}
			}
		}
?>
